package middleware

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// 跨域中间件配置

// Cors 定义一个 CORS 中间件函数
func Cors() gin.HandlerFunc {
	// 返回一个处理函数
	return func(context *gin.Context) {
		// 获取请求方法
		method := context.Request.Method
		// 设置响应头，允许所有来源
		context.Header("Access-Control-Allow-Origin", "*")
		// 设置允许的请求头
		context.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token,Authorization,Token")
		// 设置允许的请求方法
		context.Header("Access-Control-Allow-Methods", "POST,GET,OPTIONS")
		// 设置暴露的响应头
		context.Header("Access-Control-Expose-Headers", "Content-Length,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Content-Type")
		// 设置是否允许发送 cookies
		context.Header("Access-Control-Allow-Credentials", "true")

		// 放行所有 OPTIONS 方法
		if method == "OPTIONS" {
			// 中断请求并返回 204 状态码
			context.AbortWithStatus(http.StatusNoContent)
		}

		// 处理请求
		context.Next()
	}
}
